package join

import (
	"strings"

	"codeup.aliyun.com/lsxd/zltx/adapter/utils/sortx/dict"
)

// UvSort 生成排序参数字符串
// 像这样的字符串：k1=v1&k2=v2&k3=v3
// @param kvs 排序参数列表
// @param filterEmpty 是否过滤空值
// @param skipFields 跳过的字段列表
// @return any 可能是url.Values，也可能是其他类型
// @return string 排序参数字符串
func UvSort(kvs []dict.KeyValue, filter SignFilterFunc, sep string, skipFields []string, valueEncoder dict.ValueEncoder) string {
	var kvStr []string
	for _, kv := range kvs {
		key, value := kv.Key, kv.Value
		// 跳过指定字段
		hasSkip := false
		for _, field := range skipFields {
			if key == field {
				hasSkip = true
			}
		}
		if hasSkip {
			continue
		}
		// 跳过空值
		if filter != nil && filter(key, value) {
			continue
		}
		valStr := kv.ValueString(valueEncoder)
		kvStr = append(kvStr, key+"="+valStr)
	}
	signStr := strings.Join(kvStr, sep)
	return signStr
}
